Option Explicit

' ==================================================
' Descriptor
' sql 相关操作的 Addin 支持
' ==================================================

' ==================================================
' AddIn menu 配置
' ==================================================
' 加载menu
' 结构：
'    - menu (一级列表)
'      - 二级列表
'        - 功能按钮
'    - menu按钮(没有子列表，显示出来的就是一个按钮)
Public Sub loadMenu()
    ' 1. createInsertSQL, 创建数据的 insert sql
    UtilsAddIn.getMenuButton "sql-create-insert", "AddInSupport_sql", "ExecCreateInsertSql"

    ' 2. 创建 configSql
    Dim sqlConfigMenu As CommandBarPopup
    Set sqlConfigMenu = UtilsAddIn.getMenu("sql-config")
    UtilsAddIn.getActionButton sqlConfigMenu, "create-sqlConfig-sheet", "AddInSupport_sql", "createSqlConfigSheet"
    UtilsAddIn.getActionButton sqlConfigMenu, "extract-sql-parameter", "AddInSupport_sql", "extractSqlParameter"
    UtilsAddIn.getActionButton sqlConfigMenu, "fill-sql-parameter", "AddInSupport_sql", "fillSqlParameter"
    UtilsAddIn.getActionButton sqlConfigMenu, "copy-sql", "AddInSupport_sql", "copySql"
    UtilsAddIn.getActionButton sqlConfigMenu, "format-sql", "AddInSupport_sql", "formatSql"

    ' 3. sql 转换
    UtilsAddIn.getMenuButton "sql-translate", "AddInSupport_sql", "popSqlTranslateForm"

    ' 4. 按照 table 定义生成随机数据
    UtilsAddIn.getMenuButton "sql-create-data", "AddInSupport_sql", "popCreateTableDataForm"

    ' 5. sql 格式化
    UtilsAddIn.getMenuButton "sql-foramt", "AddInSupport_sql", "popSqlFormatForm"
End Sub

' ==================================================
' 模块1: 生成 insert sql
' ==================================================
' 生成 insert sql
Public Sub ExecCreateInsertSql()
    createInsertSQLForm.Show
End Sub

' ==================================================
' 模块2: 生成 sql 配置 sheet
' ==================================================
' 生成一个操作SQL的配置 sheet
Public Sub createSqlConfigSheet()
    Dim sh As SqlConfigSheet
    Set sh = New SqlConfigSheet
    sh.InitCreateBySheetName
End Sub

' 从 SQL数据生成配置 sheet 中的 SQL 内抽取参数，并写回配置 sheet
Public Sub extractSqlParameter()
    Dim sh As SqlConfigSheet
    Set sh = New SqlConfigSheet
    sh.InitBySheet ActiveSheet

    sh.extractSQLParameter
End Sub

' 填充 SQL数据生成配置 sheet 中的 SQL 内的参数
' 将会生成一个新的 sheet 来保存新的 sql
Public Sub fillSqlParameter()
    Dim sh As SqlConfigSheet
    Set sh = New SqlConfigSheet
    sh.InitBySheet ActiveSheet

    sh.fillSQLParameter
End Sub

' 拷贝sql
Public Sub copySql()
    If UtilsString.endsWith(ActiveSheet.Name, "_fillSql") Then
        ' 如果是保存了填充参数后的 sql 的 sheet，则直接拷贝已使用区域中的所有内容
        UtilsWorksheet.copySheetUsedRange ActiveSheet
    Else
        ' 对于其他的情况全部视为【配置 sheet】，则拷贝 sheet 中的sql
        Dim sh As SqlConfigSheet
        Set sh = New SqlConfigSheet
        sh.InitBySheet ActiveSheet
        sh.copySQLToClipBoard
    End If
End Sub

' 格式化sql
Public Sub formatSql()
    Dim sh As SqlConfigSheet
    Set sh = New SqlConfigSheet
    sh.InitBySheet ActiveSheet

    sh.formatSql
End Sub

' ==================================================
' 模块3: 逻辑 sql，物理 sql 转换
' ==================================================
' 弹出sql转换窗口
Public Sub popSqlTranslateForm()
    SqlTranslateForm.Show
End Sub

' ==================================================
' 模块4: 按照 table 定义生成随机数据
' ==================================================
' 弹出数据生成窗口
Public Sub popCreateTableDataForm()
    createTableDataForm.Show
End Sub

' ==================================================
' 模块5: sql 格式化
' ==================================================
' 弹出sql格式化窗口
Public Sub popSqlFormatForm()
    SqlFormatForm.Show
End Sub